package PEC5_Test;

import edu.uoc.tds.pac4.beans.Centre;
import edu.uoc.tds.pac4.beans.Localitat;
import edu.uoc.tds.pac4.beans.Pais;
import edu.uoc.tds.pac4.beans.TipusEvent;
import edu.uoc.tds.pac4.beans.Usuari;
import edu.uoc.tds.pac4.interfaces.RemoteInterface;
import edu.uoc.tds.pac4.servidor.RemoteImplementation;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Vector;

/**
 * Tecnicas de Desarrollo de Software - (UOC)
 * Pruebas de integración del subsistema de Mantenimiento
 * @author Yolanda Jiménez Anaya
 * @version 1.0
 */
public class testMantenimiento {
    private static boolean trobat;

    /**
    *
    * Metodo principal para la realización de las pruebas
    */
    public static void test(RemoteInterface remot) {

           //Insertamos un usuario
	     testInsertaUsuario(remot);
           //Modificamos un usuario
	     testModificaUsuario(remot);
           //Damos de baja un usuario
	     testBajaUsuario(remot);
           //Damos de alta un centro
             testAltaCentro(remot);
           //Modificamos un centro
	     testModificaCentro(remot);
           //Damos de baja un centro
             testBajaCentro(remot);

		
	}

    private static void testInsertaUsuario(RemoteInterface remot){
       System.out.println("**********************************");
       System.out.println("Probando la inserción de un usuario");
       System.out.println("**********************************");
       DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
       Usuari usuario = new Usuari();
       Pais paisTest = new Pais("ESP", "Spain");
       Localitat localitatTest = new Localitat(134,"Madrid", paisTest);
       System.out.println("Test metodo:insertUpdateUsuari");

       //Recuperamos los usuarios que existen en la base de datos
       try {
            Vector<Usuari> lista = remot.getUsuaris(true);
            System.out.println("\tUsuarios existentes antes de insertar: " + lista.size());
        } catch (Exception e) {
            System.out.println("\tError al obtener los usuarios");
            System.out.println(e.toString());
        }
       //Insertamos un usuario nuevo
       try {
            usuario = new Usuari("usuprueba", "000001", "nombrePrueba", "apePrubea",
                    paisTest, localitatTest, "0001", "DirePrueba",
                    "999999", "666666", "44444", "email@prueba.com",
                    "Administrador", "PASSWORD", sdf.parse("17/06/2011"));
             System.out.println("\tInsertamos un nuevo usuario:");
              System.out.println("\t*********************");
             usuario.setActiu(true);
	     remot.insertUpdateUsuari(usuario, true);

             System.out.println("\tOK");
        } catch (Exception e) {
            System.out.println("\tKO");
            System.out.println(e.toString());
        }
       //Recuperamos la lista de usuarios de la base de datos
       try {
            System.out.println("");
            System.out.println("\tRecuperamos la lista de Usuarios");            
            System.out.println("\t*********************");
            Vector<Usuari> lista = remot.getUsuaris(true);
            System.out.println("\tUsuarios existentes despues de insertar: " + lista.size());
            System.out.println("");
            System.out.println("\tRecuperar el usuario insertado");
            System.out.println("\t*********************");
            for (int i = 0; i < lista.size() && !trobat; i++) {
                if (lista.get(i).getCodi().equalsIgnoreCase("000001")) {
                    trobat = true;
                    usuario = lista.get(i);
                }
            }
            usuario = remot.getUsuari(usuario.getCodi());
            System.out.println("\tUsuario Insertado Nombre Usuario: " + usuario.getCodi());
            System.out.println("\tClave: " + usuario.getIdCard());
            System.out.println("\tNombre: " + usuario.getNom());
            System.out.println("\tOK");
        } catch (Exception e) {
            System.out.println("\tKO");
            System.out.println(e.toString());
        }
       
    }

    private static void testModificaUsuario(RemoteInterface remot) {
       System.out.println("**********************************");
       System.out.println("Probando la modificación de un usuario");
       System.out.println("**********************************");
       DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
       Usuari usuario = new Usuari();
       Pais paisTest = new Pais("ESP", "Spain");
       Localitat localitatTest = new Localitat(134,"Madrid", paisTest);
       System.out.println("Test metodo:insertUpdateUsuari");
       trobat = false;
       //Recuperamos los usuarios que existen en la base de datos
       try {
            Vector<Usuari> lista = remot.getUsuaris(true);
            System.out.println("\tUsuarios existentes antes de modificar: " + lista.size());
        } catch (Exception e) {
            System.out.println("\tError al obtener los usuarios");
            System.out.println(e.toString());
        }


       //Modificamos el usuario elegido
       try {
            usuario = new Usuari("usuprueba", "000001", "nombrePrueba2", "apePrubea2",
                    paisTest, localitatTest, "0002", "DirePrueba2",
                    "999999", "666666", "44444", "email@prueba.com",
                    "Administrador", "PASSWORD", sdf.parse("17/06/2011"));
             System.out.println("\tModificamos un usuario:");
              System.out.println("\t*********************");
             usuario.setActiu(true);
	     remot.insertUpdateUsuari(usuario, false);

             System.out.println("\tOK");
        } catch (Exception e) {
            System.out.println("\tKO");
            System.out.println(e.toString());
        }
       //Recuperamos los usuarios que existen en la base de datos despues de modificar
       try {
            Vector<Usuari> lista = remot.getUsuaris(true);
            System.out.println("\tUsuarios existentes despues de modificar: " + lista.size());
        } catch (Exception e) {
            System.out.println("\tError al obtener los usuarios");
            System.out.println(e.toString());
        }
       //Recuperamos el usuario que hemos modificado
       try {
           System.out.println("\tRecuperar el usuario que hemos modificado");
           System.out.println("\t*********************");
           Vector<Usuari> lista = remot.getUsuaris(true);

            for (int i = 0; i < lista.size() && !trobat; i++) {
                if (lista.get(i).getCodi().equalsIgnoreCase("000001")) {
                    trobat = true;
                    usuario = lista.get(i);
                }
            }
            usuario = remot.getUsuari(usuario.getCodi());
            System.out.println("\tInsertado Nombre Usuario: " + usuario.getCodi());
            System.out.println("\tClave: " + usuario.getIdCard());
            System.out.println("\tNombre: " + usuario.getNom());
            System.out.println("\tApellidos: " + usuario.getCognoms());
            System.out.println("\tOK");
        } catch (Exception e) {
            System.out.println("\tKO");
            System.out.println(e.toString());
        }
    }

    private static void testBajaUsuario(RemoteInterface remot) {
       System.out.println("**********************************");
       System.out.println("Probando la baja de un usuario");
       System.out.println("**********************************");
       DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
       Usuari usuario = new Usuari();
       Pais paisTest = new Pais("ESP", "Spain");
       Localitat localitatTest = new Localitat(134,"Madrid", paisTest);
       System.out.println("Test metodo:insertUpdateUsuari");

       //Recuperamos los usuarios que existen en la base de datos
       try {
            Vector<Usuari> lista = remot.getUsuaris(true);
            System.out.println("\tUsuarios existentes antes de eliminar: " + lista.size());
        } catch (Exception e) {
            System.out.println("\tError al obtener los usuarios");
            System.out.println(e.toString());
        }
       //Damos de baja un usuario
       try {
            usuario = new Usuari("usuprueba", "000001", "nombrePrueba2", "apePrubea2",
                    paisTest, localitatTest, "0002", "DirePrueba2",
                    "999999", "666666", "44444", "email@prueba.com",
                    "Administrador", "PASSWORD", sdf.parse("17/06/2011"));
             System.out.println("\tEliminamos un usuario:");
             System.out.println("\t*********************");
             usuario.baixa(sdf.parse("18/06/2011"), "Eliminat desde test");
	     remot.insertUpdateUsuari(usuario, false);

             System.out.println("\tOK");
        } catch (Exception e) {
            System.out.println("\tKO");
            System.out.println(e.toString());
        }
       //Recuperamos la lista de usuarios de la base de datos
       try {
            System.out.println("");
            System.out.println("\tRecuperamos la lista de Usuarios");
            System.out.println("\t*********************");
            Vector<Usuari> lista = remot.getUsuaris(true);
            System.out.println("\tUsuarios existentes despues de eliminar: " + lista.size());
            System.out.println("");
            System.out.println("\tRecuperar el usuario eliminado");
            System.out.println("\t*********************");
            for (int i = 0; i < lista.size() && !trobat; i++) {
                if (lista.get(i).getCodi().equalsIgnoreCase("000001")) {
                    trobat = true;
                    usuario = lista.get(i);
                }
            }
            usuario = remot.getUsuari(usuario.getCodi());
            System.out.println("\tElilminado Nombre Usuario: " + usuario.getCodi());
            System.out.println("\tClave: " + usuario.getIdCard());
            System.out.println("\tNombre: " + usuario.getNom());
            System.out.println("\tEstado: " + usuario.isActiu());
            System.out.println("\tFecha Baja: " + usuario.getDataBaixa());
            System.out.println("\tMorivo: " + usuario.getMotiuBaixa());
            System.out.println("\tOK");
        } catch (Exception e) {
            System.out.println("\tKO");
            System.out.println(e.toString());
        }
    }

    private static void testAltaCentro(RemoteInterface remot) {
       System.out.println("**********************************");
       System.out.println("Probando la inserción de un centro");
       System.out.println("**********************************");
       DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
       Centre centro = new Centre();
       Pais paisTest = new Pais("ESP", "Spain");
       Localitat localitatTest = new Localitat(134,"Madrid", paisTest);
       Vector<TipusEvent> tipusEvent = new Vector<TipusEvent>();

       System.out.println("Test metodo:insertUpdateUsuari");
       boolean activo = true;
       //Recuperamos los centros que existen en la base de datos
       try {
            Vector<Centre> lista = remot.getCentres(true);
            System.out.println("\tCentros existentes antes de insertar: " + lista.size());
        } catch (Exception e) {
            System.out.println("\tError al obtener los centros");
            System.out.println(e.toString());
        }
       //Insertamos un centro nuevo
       try {

            centro = new Centre ("PRU", "Centro de Prueba", "000", "DIRE PRUEBA",
		"857293904", "857293904", "857293904", "centro@prueba.com",
		"www.prueba.com", sdf.parse("17/06/2011"), paisTest, localitatTest,
		activo, sdf.parse("17/06/2011"), "null", tipusEvent, "UFB");


            System.out.println("\tInsertamos un nuevo centro:");
              System.out.println("\t*********************");
            remot.insertUpdateCentre(centro, true);
             System.out.println("\tOK");
        } catch (Exception e) {
            System.out.println("\tKO");
            System.out.println(e.toString());
        }
       //Recuperamos la lista de centros de la base de datos
       try {
            System.out.println("");
            System.out.println("\tRecuperamos la lista de Centros");
            System.out.println("\t*********************");
            Vector<Centre> lista = remot.getCentres(true);
            System.out.println("\tCentros existentes despues de insertar: " + lista.size());
            System.out.println("");
            System.out.println("\tRecuperar el centro insertado");
            System.out.println("\t*********************");
            for (int i = 0; i < lista.size() && !trobat; i++) {
                if (lista.get(i).getCodi().equalsIgnoreCase("PRU")) {
                    trobat = true;
                    centro = lista.get(i);
                }
            }
            //centro = remot.getCentres(centro.getCodi());
            System.out.println("\tUsuario Insertado Codigo Centro: " + centro.getCodi());
            System.out.println("\tNombre: " + centro.getNom());
            System.out.println("\tOK");
        } catch (Exception e) {
            System.out.println("\tKO");
            System.out.println(e.toString());
        }

    }

    private static void testModificaCentro(RemoteInterface remot) {

       System.out.println("**********************************");
       System.out.println("Probando la modificación de un centro");
       System.out.println("**********************************");
       DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
       Centre centro = new Centre();
       Vector<TipusEvent> tipusEvent = new Vector<TipusEvent>();
       Pais paisTest = new Pais("ESP", "Spain");
       Localitat localitatTest = new Localitat(134,"Madrid", paisTest);
       boolean activo = true;
       System.out.println("Test metodo:insertUpdateUsuari");
       trobat = false;
       //Recuperamos los usuarios que existen en la base de datos
       try {
            Vector<Centre> lista = remot.getCentres(true);
            System.out.println("\tCentros existentes antes de insertar: " + lista.size());
        } catch (Exception e) {
            System.out.println("\tError al obtener los centros");
            System.out.println(e.toString());
        }

       //Modificamos el centro elegido
       try {
            centro = new Centre ("PRU", "Centro de Prueba2", "000", "DIRE PRUEBA",
		"857293904", "857293904", "857293904", "centro@prueba.com",
		"www.prueba.com", sdf.parse("17/06/2011"), paisTest, localitatTest,
		activo, sdf.parse("17/06/2011"), "null", tipusEvent, "UFB");

             System.out.println("\tModificamos un centro:");
              System.out.println("\t*********************");
	     remot.insertUpdateCentre(centro, false);

             System.out.println("\tOK");
        } catch (Exception e) {
            System.out.println("\tKO");
            System.out.println(e.toString());
        }

       //Recuperamos el centro que hemos modificado
       try {
            System.out.println("");
            System.out.println("\tRecuperamos la lista de Centros");
            System.out.println("\t*********************");
            Vector<Centre> lista = remot.getCentres(true);
            System.out.println("\tCentros existentes despues de insertar: " + lista.size());
            System.out.println("");
            System.out.println("\tRecuperar el centro insertado");
            System.out.println("\t*********************");
            for (int i = 0; i < lista.size() && !trobat; i++) {
                if (lista.get(i).getCodi().equalsIgnoreCase("PRU")) {
                    trobat = true;
                    centro = lista.get(i);
                }
            }
            System.out.println("\tUsuario Insertado Codigo Centro: " + centro.getCodi());
            System.out.println("\tNombre: " + centro.getNom());
            System.out.println("\tOK");
        } catch (Exception e) {
            System.out.println("\tKO");
            System.out.println(e.toString());
        }

    }

    private static void testBajaCentro(RemoteInterface remot) {

       System.out.println("**********************************");
       System.out.println("Probando la baja de un centro");
       System.out.println("**********************************");
       DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
       Centre centro = new Centre();
       Vector<TipusEvent> tipusEvent = new Vector<TipusEvent>();
       Pais paisTest = new Pais("ESP", "Spain");
       Localitat localitatTest = new Localitat(134,"Madrid", paisTest);
       System.out.println("Test metodo:insertUpdateUsuari");
       boolean activo = true;
       //Recuperamos los centros que existen en la base de datos
       try {
            Vector<Centre> lista = remot.getCentres(true);
            System.out.println("\tCentros existentes antes de eliminar: " + lista.size());
        } catch (Exception e) {
            System.out.println("\tError al obtener los centros");
            System.out.println(e.toString());
        }
       //Damos de baja un centro
       try {
            centro = new Centre ("PRU", "Centro de Prueba2", "000", "DIRE PRUEBA",
		"857293904", "857293904", "857293904", "centro@prueba.com",
		"www.prueba.com", sdf.parse("17/06/2011"), paisTest, localitatTest,
		activo, sdf.parse("17/06/2011"), "null", tipusEvent, "UFB");

             System.out.println("\tEliminamos un centro:");
             System.out.println("\t*********************");
             centro.baixa(sdf.parse("18/06/2011"), "Eliminat desde test");
             remot.insertUpdateCentre(centro, false);
             System.out.println("\tOK");
        } catch (Exception e) {
            System.out.println("\tKO");
            System.out.println(e.toString());
        }
       //Recuperamos la lista de centros de la base de datos
         try {
            System.out.println("");
            System.out.println("\tRecuperamos la lista de Centros");
            System.out.println("\t*********************");
            Vector<Centre> lista = remot.getCentres(true);
            System.out.println("\tCentros existentes despues de eliminar: " + lista.size());
            System.out.println("");
            System.out.println("\tRecuperar el centro elimnado");
            System.out.println("\t*********************");
            for (int i = 0; i < lista.size() && !trobat; i++) {
                if (lista.get(i).getCodi().equalsIgnoreCase("PRU")) {
                    trobat = true;
                    centro = lista.get(i);
                }
            }
            System.out.println("\tEliminado Codigo Centro: " + centro.getCodi());
            System.out.println("\tNombre: " + centro.getNom());
             System.out.println("\tEstado: " + centro.isActiu());
            System.out.println("\tFecha Baja: " + centro.getDataBaixa());
            System.out.println("\tMorivo: " + centro.getMotiuBaixa());
            System.out.println("\tOK");
        } catch (Exception e) {
            System.out.println("\tKO");
            System.out.println(e.toString());
        }
    }



    public static void main(String[] args) {
        RemoteInterface remot = null;
        try {
            System.out.println("Inicio test del Subsistema Mantenimiento");
            remot = new RemoteImplementation();
            //Inicializamos el test
            test(remot);
            System.out.println("Fin test del Subsistema Mantenimiento");
        } catch (Exception e) {
            System.out.println("Error en la realizacion de las pruebas");
        }
    }


}
